//========================================================================
//  SE5 AI Performance Analysis - Captain Kwok's Balance Mod v125+
//========================================================================
//
// 1.  Load empire strategies
// 2.  Update monthly performance tracking
// 3.  Each ####.0 turn compute overall empire performance
// 4.  Each ####.0 turn update empire and design strategies if desired
// 5.  Set empire/design strategy modifiers
// 6.  Save empire strategies
//
// Balance Mod Changes:
// --------------------
// v1.29 Fixed   - Computer players were not correctly saving the date when they started a new design strategy
//       Changed - Special conditions for Neutral players for empire strategies
// v1.21 Changed - Added performance penalty for being out of top 50%
// v1.20 Added   - Created Script_AI_PerformanceAnalysis
//       Added   - Fx[Load_Empire_Strategies] and Fx[Save_Empire_Strategies] to track the AI's general game strategies
//       Added   - Fx[Analyze_Empire_Performance] to look at the AI's progress on a yearly basis
//       Added   - Fx[Analyze_Turn_Trends] to track turn-to-turn trends in AI's resource/point production and combat performance
//       Added   - Fx[Set_Empire_Strategies] to choose AI strategy based on category, performance and progress variables
//       Added   - Fx[Set_Empire_Strategy_Modifiers] to adjust global AI empire strategy and design modifiers
//
// Balance Mod To-Do List:
// -----------------------
// - Nothing pending
//
// Script Function Requests:
// -------------------------
// - None

//------------------------------------------------------------------------
// Forward Declarations
//------------------------------------------------------------------------
deffunc

function AI_PerformanceAnalysis returns boolean
params
end

function Load_Empire_Strategies returns boolean
params
end

function Save_Empire_Strategies returns boolean
params
end

function Analyze_Turn_Trends returns boolean
params
end

function Analyze_Empire_Performance returns boolean
params
end

function Set_Empire_Strategies returns boolean
params
end

function Set_Empire_Strategy_Modifiers returns boolean
params
end

enddeffunc

//------------------------------------------------------------------------
// AI_PerformanceAnalysis
//------------------------------------------------------------------------
function AI_PerformanceAnalysis returns boolean
begin

  // Debug output
  call Sys_Debug_Print("Performance", "--------------------")
  call Sys_Debug_Print("Performance", "Turn Trend Analysis:")

  // Load our empire/design strategies
  call Load_Empire_Strategies()

  // Analyze our resource/point production and combat performance trends each turn
  call Analyze_Turn_Trends()

  // Analyze our general overall performance on each ####.0 turn
  if (Sys_Mod_Long(sys_long_Game_Date, 10) = 0) then
    // Debug output
    call Sys_Debug_Print("Performance", "----------------------------")
    call Sys_Debug_Print("Performance", "Yearly Performance Analysis:")
    // Determine our empire's progress over the last year
    call Analyze_Empire_Performance()
    // Set our empire and design strategies
    call Set_Empire_Strategies()
  endif

  // Set our empire/design strategy modifiers
  call Set_Empire_Strategy_Modifiers()

  // Save our empire/design strategies
  call Save_Empire_Strategies()

  return TRUE
end

//------------------------------------------------------------------------
// Load_Empire_Strategies
//------------------------------------------------------------------------
function Load_Empire_Strategies returns boolean
vars
  empire_strategy:           long
  empire_strategy_date:      long
  design_strategy:           long
  design_strategy_date:      long
begin

  // Load our strategies
  set empire_strategy := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 15)
  set empire_strategy_date := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 16)
  set design_strategy := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 17)
  set design_strategy_date := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 18)

  // Set our strategies to our saved ones
  if (empire_strategy > 0) then
    set lng_AI_Empire_Strategy := empire_strategy
  endif
  if (empire_strategy_date > 0) then
    set lng_AI_Empire_Strategy_Date := empire_strategy_date
  endif
  if (design_strategy > 0) then
    set lng_AI_Empire_Design_Strategy := design_strategy
  endif
   if (design_strategy_date > 0) then
    set lng_AI_Empire_Design_Strategy_Date := design_strategy_date
  endif

  return TRUE
end

//------------------------------------------------------------------------
// Save_Empire_Strategies
//------------------------------------------------------------------------
function Save_Empire_Strategies returns boolean
begin

  // Save our strategies
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 15, lng_AI_Empire_Strategy)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 16, lng_AI_Empire_Strategy_Date)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 17, lng_AI_Empire_Design_Strategy)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 18, lng_AI_Empire_Design_Strategy_Date)

  return TRUE
end

//------------------------------------------------------------------------
// Analyze_Turn_Trends
//------------------------------------------------------------------------
function Analyze_Turn_Trends returns boolean
vars
  turns_minerals_low:        long
  turns_organics_low:        long
  turns_radioactives_low:    long
  turns_maintenance_high:    long
  turns_research_pts_low:    long
  turns_intel_pts_low:       long
  turns_space_combat_poor:   long
  turns_ground_combat_poor:  long
begin

  // Load our research and point production trends
  set turns_minerals_low := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 9, 1)
  set turns_organics_low := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 9, 2)
  set turns_radioactives_low := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 9, 3)
  set turns_maintenance_high := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 9, 4)
  set turns_research_pts_low := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 9, 5)
  set turns_intel_pts_low := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 9, 6)
  set turns_space_combat_poor := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 9, 7)
  set turns_ground_combat_poor := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 9, 8)

  // Have we been low on minerals for several turns?
  if (bool_Race_Minerals_Low) then
    set turns_minerals_low := turns_minerals_low + 1
    // Debug Output
    call Sys_Debug_Print("Performance", "  - Minerals Low for " + Sys_Convert_Long_To_String(turns_minerals_low) + " turns")
  else
    set turns_minerals_low := 0
  endif

  if (turns_minerals_low >= 10) then
    set bool_Race_Minerals_Cont_Low := TRUE
  endif

  // Have we been low on organics for several turns?
  if (bool_Race_Organics_Low) then
    set turns_organics_low := turns_organics_low + 1
    // Debug Output
    call Sys_Debug_Print("Performance", "  - Organics Low for " + Sys_Convert_Long_To_String(turns_organics_low) + " turns")
  else
    set turns_organics_low := 0
  endif

  if (turns_organics_low >= 10) then
    set bool_Race_Organics_Cont_Low := TRUE
  endif

  // Have we been low on radioactives for several turns?
  if (bool_Race_Radioactives_Low) then
    set turns_radioactives_low := turns_radioactives_low + 1
    // Debug Output
    call Sys_Debug_Print("Performance", "  - Radioactives Low for " + Sys_Convert_Long_To_String(turns_radioactives_low) + " turns")
  else
    set turns_radioactives_low := 0
  endif

  if (turns_radioactives_low >= 10) then
    set bool_Race_Radioactives_Cont_Low := TRUE
  endif

  // Have we been high on maintenance for several turns?
  if (bool_Race_Maintenance_High) then
    set turns_maintenance_high := turns_maintenance_high + 1
    // Debug Output
    call Sys_Debug_Print("Performance", "  - Maintenance high for " + Sys_Convert_Long_To_String(turns_maintenance_high) + " turns")
  else
    set turns_maintenance_high := 0
  endif

  if (turns_maintenance_high >= 10) then
    set bool_Race_Maintenance_Cont_High := TRUE
  endif

  // Have we been lagging in research for several turns?
  if (bool_Enemy_Ahead_In_Research) or (bool_Enemy_Far_Ahead_In_Research) then
    set turns_research_pts_low := turns_research_pts_low + 1
    // Debug Output
    call Sys_Debug_Print("Performance", "  - Research Low for " + Sys_Convert_Long_To_String(turns_research_pts_low) + " turns")
  else
    set turns_research_pts_low := 0
  endif

  if (turns_research_pts_low >= 10) and ((turns_minerals_low + turns_organics_low + turns_radioactives_low) > 1) then
    set bool_Race_Boost_Research := TRUE
  endif

  // Have we been lagging in intel for several turns?
  if (bool_Enemy_Ahead_In_Intel) or (bool_Enemy_Far_Ahead_In_Intel) then
    set turns_intel_pts_low := turns_intel_pts_low + 1
    // Debug Output
    call Sys_Debug_Print("Performance", "  - Intelligence Low for " + Sys_Convert_Long_To_String(turns_intel_pts_low) + " turns")
  else
    set turns_intel_pts_low := 0
  endif

  if (turns_intel_pts_low >= 10) and ((turns_minerals_low + turns_organics_low + turns_radioactives_low + turns_research_pts_low) > 1) then
    set bool_Race_Boost_Intel := TRUE
  endif

  // Combat trends?
  // Space Combat
  if (bool_Race_Space_Combat_Poor) then
    set turns_space_combat_poor := turns_space_combat_poor + 1
    // Debug Output
    call Sys_Debug_Print("Performance", "  - Space Combat Poor for " + Sys_Convert_Long_To_String(turns_space_combat_poor) + " turns")
    // Prompt a design strategy change if space combat is poor for many turns
    if (Sys_Mod_Long(turns_space_combat_poor, 25) = 0) then
     set bool_Race_Prompt_Design_Strategy_Change := TRUE
    endif
  else
    set turns_space_combat_poor := 0
  endif
  // Ground Combat
  if (bool_Race_Ground_Combat_Poor) then
    set turns_ground_combat_poor := turns_ground_combat_poor + 1
    // Debug Output
    call Sys_Debug_Print("Performance", "  - Ground Combat Poor for " + Sys_Convert_Long_To_String(turns_ground_combat_poor) + " turns")
 else
   set turns_ground_combat_poor := 0
  endif

  // Save our resource, point production and combat trends
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 9, 1, turns_minerals_low)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 9, 2, turns_organics_low)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 9, 3, turns_radioactives_low)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 9, 4, turns_maintenance_high)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 9, 5, turns_research_pts_low)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 9, 6, turns_intel_pts_low)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 9, 7, turns_space_combat_poor)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 9, 8, turns_ground_combat_poor)

  return TRUE
end

//------------------------------------------------------------------------
// Analyze_Empire_Performance
//------------------------------------------------------------------------
function Analyze_Empire_Performance returns boolean
vars
  prev_date:                 long
  prev_score:                long
  prev_score_rank:           long
  prev_state_modifier:       long
  prev_num_colonies:         long
  prev_num_population:       long
  prev_num_facilities:       long
  prev_num_ships:            long
  prev_num_minerals:         long
  prev_num_organics:         long
  prev_num_radioactives:     long
  prev_num_research_pts:     long
  prev_num_intel_pts:        long
  prev_progress:             long
  prev_progress_time:        long
  progress_pts:              long
begin

  // Load our previously saved performance data
  if (Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 1) > 0) then
    set prev_score := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 1)
    set prev_score_rank := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 2)
    set prev_state_modifier := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 3)
    set prev_num_colonies := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 4)
    set prev_num_population := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 5)
    set prev_num_facilities := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 6)
    set prev_num_ships := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 7)
    set prev_num_minerals := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 8)
    set prev_num_organics := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 9)
    set prev_num_radioactives := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 10)
    set prev_num_research_pts := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 11)
    set prev_num_intel_pts := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 12)
    set prev_progress := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 13)
    set prev_progress_time := Sys_Get_AI_Storage_Long(sys_long_Player_ID, 8, 14)
  endif

  // Get our current values
  set lng_AI_Empire_Num_Minerals := Sys_Trunc(Sys_AI_Empire_Stats_Get_Colonies_Statistics_Real(sys_long_Player_ID, COLONIES_STATS_FILTER_TOTAL_POINTS_PRODUCED_MINERALS))
  set lng_AI_Empire_Num_Organics := Sys_Trunc(Sys_AI_Empire_Stats_Get_Colonies_Statistics_Real(sys_long_Player_ID, COLONIES_STATS_FILTER_TOTAL_POINTS_PRODUCED_ORGANICS))
  set lng_AI_Empire_Num_Radioactives := Sys_Trunc(Sys_AI_Empire_Stats_Get_Colonies_Statistics_Real(sys_long_Player_ID, COLONIES_STATS_FILTER_TOTAL_POINTS_PRODUCED_RADIOACTIVES))
  set lng_AI_Empire_Num_Research_Pts := Sys_Get_Empire_Current_Points(sys_long_Player_ID, POINT_TYPE_RESEARCH)
  set lng_AI_Empire_Num_Intel_Pts := Sys_Get_Empire_Current_Points(sys_long_Player_ID, POINT_TYPE_INTELLIGENCE)

  // Compare our current score to previous
  if (prev_score > 0) then
    set progress_pts := progress_pts + Sys_Divide_Long(lng_AI_Empire_Score * 10, prev_score)
  else
    set progress_pts := progress_pts + 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - Score (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_score) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_Score))

  // Compare our current score rank to previous
  if (prev_score_rank < lng_AI_Empire_Score_Rank) then
    set progress_pts := progress_pts - 10
  else
    set progress_pts := progress_pts + 10
  endif

  // Debug output
  call Sys_Debug_Print("Performance", "  - Score Rank (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_score_rank) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_Score_Rank))

  // Add bonus or penalty if our score rank is not in the top 50%
  if (lng_AI_Empire_Score_Rank <= (Sys_Get_Number_Of_Players() * 0.5)) then
    set progress_pts := progress_pts + 5
    // Debug output
    call Sys_Debug_Print("Performance", "  - Top 50%")
  else
    set progress_pts := progress_pts - 10
    // Debug output
    call Sys_Debug_Print("Performance", "  - Not in top 50%")
  endif

  // Compare our current state modifier versus our previous
  set progress_pts := progress_pts + (prev_state_modifier - lng_AI_Empire_State_Modifier)
  // Debug output
  call Sys_Debug_Print("Performance", "  - Empire State Modifier (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_state_modifier) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_State_Modifier))

  // Compare number of colony amounts
  if (prev_num_colonies > 0) then
    set progress_pts := progress_pts + (10 + lng_AI_Empire_Num_Colonies - prev_num_colonies)
  else
    set progress_pts := progress_pts + 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - # Colonies (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_num_colonies) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_Num_Colonies))

  // Compare population amounts
  if (prev_num_population > 0) then
    set progress_pts := progress_pts + Sys_Divide_Long(lng_AI_Empire_Num_Population * 10, prev_num_population)
  else
    set progress_pts := progress_pts + 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - # Population (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_num_population) + "M/" + Sys_Convert_Long_To_String(lng_AI_Empire_Num_Population) + "M")

  // Compare facility amounts
  if (prev_num_facilities > 0) then
    set progress_pts := progress_pts + Sys_Divide_Long(lng_AI_Empire_Num_Facilities * 10, prev_num_facilities)
  else
    set progress_pts := progress_pts + 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - # Facilities (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_num_facilities) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_Num_Facilities))

  // Compare ship amounts
  if (prev_num_ships > 0) then
    set progress_pts := progress_pts + Sys_Divide_Long(lng_AI_Empire_Num_Ships * 10, prev_num_ships)
  else
    set progress_pts := progress_pts + 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - # Ships (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_num_ships) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_Num_Ships))

  // Compare Minerals amounts
  if (prev_num_minerals > 0) then
    set progress_pts := progress_pts + Sys_Divide_Long(lng_AI_Empire_Num_Minerals * 10, prev_num_minerals)
  else
    set progress_pts := progress_pts + 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - # Minerals (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_num_minerals) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_Num_Minerals))

  // Compare Organics Amounts
  if (prev_num_organics > 0) then
    set progress_pts := progress_pts + Sys_Divide_Long(lng_AI_Empire_Num_Organics * 10, prev_num_organics)
  else
    set progress_pts := progress_pts + 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - # Organics (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_num_organics) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_Num_Organics))

  // Compare Radioactives amounts
  if (prev_num_radioactives > 0) then
    set progress_pts := progress_pts + Sys_Divide_Long(lng_AI_Empire_Num_Radioactives * 10, prev_num_radioactives)
  else
    set progress_pts := progress_pts + 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - # Radioactives (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_num_radioactives) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_Num_Radioactives))

  // Compare Research amounts
  if (prev_num_research_pts > 0) then
    set progress_pts := progress_pts + Sys_Divide_Long(lng_AI_Empire_Num_Research_Pts * 10, prev_num_research_pts)
  endif
  // Assign neutral value for progress if we are at max tech
  if (bool_Race_At_Max_Tech) then
    set progress_pts := progress_pts + 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - # Research Pts (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_num_research_pts) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_Num_Research_Pts))

  // Compare Intelligence amounts
  if (prev_num_intel_pts > 0) then
    set progress_pts := progress_pts + Sys_Divide_Long(lng_AI_Empire_Num_Intel_Pts * 10, prev_num_intel_pts)
  else
    set progress_pts := progress_pts + 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - # Intel Pts (Pre/Cur) = " + Sys_Convert_Long_To_String(prev_num_intel_pts) + "/" + Sys_Convert_Long_To_String(lng_AI_Empire_Num_Intel_Pts))

  // Debug output
  set progress_pts := progress_pts - 100
  call Sys_Debug_Print("Performance", "  - # Progress Pts = " + Sys_Convert_Long_To_String(progress_pts))

  // Set our progress level
  if (progress_pts < -20) or (progress_pts < 0 and prev_progress = AI_EMPIRE_PROGRESS_TERRIBLE) then
    set lng_AI_Empire_Progress := AI_EMPIRE_PROGRESS_TERRIBLE
    // Debug output
    call Sys_Debug_Print("Performance", "  - Empire Progress = Terrible")
  endif
  if ((progress_pts >= -20) and (progress_pts < 0)) or (progress_pts < 0 and progress_pts > -20 and prev_progress <= AI_EMPIRE_PROGRESS_POOR) then
    set lng_AI_Empire_Progress := AI_EMPIRE_PROGRESS_POOR
    // Debug output
    call Sys_Debug_Print("Performance", "  - Empire Progress = Poor")
  endif
  if (progress_pts >= 0) and (progress_pts < 10) then
    set lng_AI_Empire_Progress := AI_EMPIRE_PROGRESS_OK
    // Debug output
    call Sys_Debug_Print("Performance", "  - Empire Progress = Ok")
  endif
  if (progress_pts >= 10) and (progress_pts < 20) then
    set lng_AI_Empire_Progress := AI_EMPIRE_PROGRESS_GOOD
    // Debug output
    call Sys_Debug_Print("Performance", "  - Empire Progress = Good")
  endif
  if (progress_pts > 20) then
    set lng_AI_Empire_Progress := AI_EMPIRE_PROGRESS_EXCELLENT
    // Debug output
    call Sys_Debug_Print("Performance", "  - Empire Progress = Excellent")
  endif

  // Note the length of time we have been at a progress level
  if (lng_AI_Empire_Progress = prev_progress) then
    set lng_AI_Empire_Progress_Time := prev_progress_time + 10
  else
    set lng_AI_Empire_Progress_Time := 10
  endif
  // Debug output
  call Sys_Debug_Print("Performance", "  - Progress time = " + Sys_Convert_Long_To_String(lng_AI_Empire_Progress_Time) + " turns")

  // Save our current performance data
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 1, lng_AI_Empire_Score)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 2, lng_AI_Empire_Score_Rank)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 3, lng_AI_Empire_State_Modifier)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 4, lng_AI_Empire_Num_Colonies)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 5, lng_AI_Empire_Num_Population)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 6, lng_AI_Empire_Num_Facilities)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 7, lng_AI_Empire_Num_Ships)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 8, lng_AI_Empire_Num_Minerals)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 9, lng_AI_Empire_Num_Organics)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 10, lng_AI_Empire_Num_Radioactives)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 11, lng_AI_Empire_Num_Research_Pts)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 12, lng_AI_Empire_Num_Intel_Pts)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 13, lng_AI_Empire_Progress)
  call Sys_Set_AI_Storage_Long(sys_long_Player_ID, 8, 14, lng_AI_Empire_Progress_Time)

  return TRUE
end

//------------------------------------------------------------------------
// Set_Empire_Strategies
//------------------------------------------------------------------------
function Set_Empire_Strategies returns boolean
vars
  prev_empire_strategy:      long
  prev_empire_strategy_date: long
  prev_design_strategy:      long
  prev_design_strategy_date: long
begin

  // Note our previous strategies
  set prev_empire_strategy := lng_AI_Empire_Strategy
  set prev_empire_strategy_date := lng_AI_Empire_Strategy_Date
  set prev_design_strategy := lng_AI_Empire_Design_Strategy
  set prev_design_strategy_date := lng_AI_Empire_Design_Strategy_Date

  // Determine our overall empire strategy based on our category, overall performance and current progress level
  case lng_AI_Categorization
    // PEACEFUL
    AI_CATEGORY_PEACEFUL:
      case lng_AI_Empire_Overall_Performance
        // Peaceful + Terrible Overall
        AI_EMPIRE_OVERALL_TERRIBLE:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
            AI_EMPIRE_PROGRESS_POOR:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
            AI_EMPIRE_PROGRESS_OK:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_SEEK_PEACE
            AI_EMPIRE_PROGRESS_GOOD:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_SEEK_PEACE
            AI_EMPIRE_PROGRESS_EXCELLENT:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_SEEK_PEACE
          endcase
        AI_EMPIRE_OVERALL_POOR:
          // Peaceful + Poor Overall
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_SEEK_PEACE
            AI_EMPIRE_PROGRESS_POOR:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_SEEK_PEACE
            AI_EMPIRE_PROGRESS_OK:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_SEEK_PEACE
            AI_EMPIRE_PROGRESS_GOOD:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
            AI_EMPIRE_PROGRESS_EXCELLENT:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
          endcase
        AI_EMPIRE_OVERALL_OK:
          // Peaceful + OK Overall
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
          endcase
        AI_EMPIRE_OVERALL_GOOD:
          // Peaceful + Good Overall
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
          endcase
        AI_EMPIRE_OVERALL_EXCELLENT:
          // Peaceful + Excellent Overall
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
              endif
          endcase
      endcase
    // NEUTRAL
    AI_CATEGORY_NEUTRAL:
      // Neutral + Terrible Overall
      case lng_AI_Empire_Overall_Performance
        AI_EMPIRE_OVERALL_TERRIBLE:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
            AI_EMPIRE_PROGRESS_POOR:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
            AI_EMPIRE_PROGRESS_OK:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
            AI_EMPIRE_PROGRESS_GOOD:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
            AI_EMPIRE_PROGRESS_EXCELLENT:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
          endcase
        // Neutral + Poor Overall
        AI_EMPIRE_OVERALL_POOR:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_SEEK_PEACE
            AI_EMPIRE_PROGRESS_POOR:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_SEEK_PEACE
            AI_EMPIRE_PROGRESS_OK:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_SEEK_PEACE
            AI_EMPIRE_PROGRESS_GOOD:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
            AI_EMPIRE_PROGRESS_EXCELLENT:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
          endcase
        // Neutral + OK Overall
        AI_EMPIRE_OVERALL_OK:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
          endcase
        // Neutral + Good Overall
        AI_EMPIRE_OVERALL_GOOD:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
          endcase
        // Neutral + Excellent Overall
        AI_EMPIRE_OVERALL_EXCELLENT:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
          endcase
      endcase
    // AGGRESSIVE
    AI_CATEGORY_AGGRESSIVE:
      case lng_AI_Empire_Overall_Performance
        // Aggressive + Terrible Overall
        AI_EMPIRE_OVERALL_TERRIBLE:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_POOR:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_OK:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_GOOD:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_EXCELLENT:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
          endcase
        // Aggressive + Poor Overall
        AI_EMPIRE_OVERALL_POOR:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_POOR:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_OK:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
            AI_EMPIRE_PROGRESS_GOOD:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
            AI_EMPIRE_PROGRESS_EXCELLENT:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
          endcase
        // Aggressive + OK Overall
        AI_EMPIRE_OVERALL_OK:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
          endcase
        // Aggressive + Good Overall
        AI_EMPIRE_OVERALL_GOOD:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              endif
          endcase
        // Aggressive + Excellent Overall
        AI_EMPIRE_OVERALL_EXCELLENT:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              endif
          endcase
      endcase
    AI_CATEGORY_XENOPHOBIC:
      case lng_AI_Empire_Overall_Performance
        // Xenophobic + Terrible Overall
        AI_EMPIRE_OVERALL_TERRIBLE:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_POOR:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_OK:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_GOOD:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_EXCELLENT:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
          endcase
        // Xenophobic + Poor Overall
        AI_EMPIRE_OVERALL_POOR:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_POOR:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_OUT_IN_FLAMES
            AI_EMPIRE_PROGRESS_OK:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
            AI_EMPIRE_PROGRESS_GOOD:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
            AI_EMPIRE_PROGRESS_EXCELLENT:
              set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
          endcase
        // Xenophobic + OK Overall
        AI_EMPIRE_OVERALL_OK:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
          endcase
        // Xenophobic + Good Overall
        AI_EMPIRE_OVERALL_GOOD:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_BUILDUP
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
          endcase
        // Xenophobic + Excellent Overall
        AI_EMPIRE_OVERALL_EXCELLENT:
          case lng_AI_Empire_Progress
            AI_EMPIRE_PROGRESS_TERRIBLE:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_POOR:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_OK:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_GOOD:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
            AI_EMPIRE_PROGRESS_EXCELLENT:
              if (lng_AI_Num_Of_Wars > 0) then
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_RIVAL_ATTACK
              else
                set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_WEAK_ATTACK
              endif
          endcase
      endcase
  endcase

  // Don't bother with performance or progress modifiers if we are a Neutral player
  if (bool_Are_We_Neutral_Player) then
    case lng_AI_Categorization
      AI_CATEGORY_PEACEFUL:
        set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_PEACEFUL
      AI_CATEGORY_NEUTRAL:
        set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
      AI_CATEGORY_AGGRESSIVE:
        set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
      AI_CATEGORY_XENOPHOBIC:
        set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_DEFEND
    endcase
    // If Neutral Player is under attack and not doing well, just fortify remaining positions
    if ((lng_AI_Num_Of_Wars > 0) or (bool_Race_Space_Combat_Poor)) and (lng_AI_Empire_Progress < AI_EMPIRE_PROGRESS_OK) then
      set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_LAST_STAND
    endif
  endif

  // If AI team mode, human players are always our rival
  if Sys_Is_Game_Using_Teams() then
    if (lng_AI_Empire_Strategy = AI_EMPIRE_STRATEGY_RIVAL_ATTACK) then
      set lng_AI_Empire_Strategy := AI_EMPIRE_STRATEGY_HUMAN_ATTACK
    endif
  endif

  case lng_AI_Empire_Strategy
    AI_EMPIRE_STRATEGY_PEACEFUL:
      call Sys_Debug_Print("Performance", "  - Empire Strategy = Peaceful")
    AI_EMPIRE_STRATEGY_DEFEND:
      call Sys_Debug_Print("Performance", "  - Empire Strategy = Defend")
    AI_EMPIRE_STRATEGY_BUILDUP:
      call Sys_Debug_Print("Performance", "  - Empire Strategy = Buildup")
    AI_EMPIRE_STRATEGY_WEAK_ATTACK:
      call Sys_Debug_Print("Performance", "  - Empire Strategy = Weak Attack")
    AI_EMPIRE_STRATEGY_RIVAL_ATTACK:
      call Sys_Debug_Print("Performance", "  - Empire Strategy = Rival Attack")
    AI_EMPIRE_STRATEGY_HUMAN_ATTACK:
      call Sys_Debug_Print("Performance", "  - Empire Strategy = Human Attack")
    AI_EMPIRE_STRATEGY_LAST_STAND:
      call Sys_Debug_Print("Performance", "  - Empire Strategy = Last Stand")
    AI_EMPIRE_STRATEGY_OUT_IN_FLAMES:
      call Sys_Debug_Print("Performance", "  - Empire Strategy = Out in Flames")
  endcase

  // Empire strategy date
  if (prev_empire_strategy <> lng_AI_Empire_Strategy) then
    set lng_AI_Empire_Strategy_Date := sys_long_Game_Date
  endif

  // Empire design strategy matrix
  if (bool_Race_Prompt_Design_Strategy_Change) then
    case lng_AI_Empire_Design_Strategy
      // Direct Fire design strategy not working well...?
      AI_DESIGN_STRATEGY_DIRECTFIRE:
        if (bool_Enemy_Ships_Are_Much_Faster) then
          // Transition to smaller ships
          set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_DIRECTFIRE_SMALL
        else
          // Transition to mixed direct fire, seeker usage
          set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_MIXED
        endif
        // Debug output
        call Sys_Debug_Print("Performance", "  - Switching Design Strategy from Direct Fire")

      // Direct fire with smaller ships design strategy not working well...?
      AI_DESIGN_STRATEGY_DIRECTFIRE_SMALL:
        if (bool_Enemy_Ships_Are_Much_Faster) then
          // Transition to mixed direct fire, seeker usage with smaller ships
          set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_MIXED_SMALL
        else
          if (bool_Enemy_Uses_Seeker_Weapons) then
            // Transition to mixed direct fire, seeker usage with larger ships
            set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_MIXED
          else
            // Transition to direct fire with larger ships
            set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_DIRECTFIRE
          endif
        endif
        // Debug output
        call Sys_Debug_Print("Performance", "  - Switching Design Strategy from Direct Fire + Small")

      // Mixed direct fire, seeker design strategy not working well...?
      AI_DESIGN_STRATEGY_MIXED:
        if (bool_Enemy_Ships_Are_Much_Faster) then
          if (bool_Enemy_Uses_Seeker_Weapons) then
            // Transition to seeker usage with smaller ships
            set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_SEEKER_SMALL
          else
            // Transition to direct fire, seeker usage with smaller ships
            set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_MIXED_SMALL
          endif
        else
          // Transition to direct fire
          set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_DIRECTFIRE
        endif
        // Debug output
        call Sys_Debug_Print("Performance", "  - Switching Design Strategy from Mixed")

      // Mixed direct fire, seeker with smaller ships design strategy not working well...?
      AI_DESIGN_STRATEGY_MIXED_SMALL:
        if (bool_Enemy_Ships_Are_Much_Faster) then
          if (bool_Enemy_Uses_Seeker_Weapons) then
            // Transition to seeker usage with smaller ships
            set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_SEEKER_SMALL
          else
            // Transition to direct fire with smaller ships
            set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_DIRECTFIRE_SMALL
          endif
        else
          if (bool_Enemy_Uses_Seeker_Weapons) then
            // Transition to seeker usage with larger ships
            set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_SEEKER
          else
            // Transition to direct fire with larger ships
            set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_DIRECTFIRE
          endif
        endif
        // Debug output
        call Sys_Debug_Print("Performance", "  - Switching Design Strategy from Mixed + Small")

      // Seeker design strategy not working well...?
      AI_DESIGN_STRATEGY_SEEKER:
        if (bool_Enemy_Ships_Are_Much_Faster) then
          if (bool_Enemy_Uses_Seeker_Weapons) then
            // Transition to seeker usage with smaller ships
            set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_SEEKER_SMALL
          else
            // Transition to direct fire, seeker usage with smaller ships
            set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_MIXED_SMALL
          endif
        else
          // Transition to direct fire. seeker usage with larger ships
          set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_MIXED
        endif
        // Debug output
        call Sys_Debug_Print("Performance", "  - Switching Design Strategy from Seeker")

      // Seeker with smaller ships design strategy not working well...?
      AI_DESIGN_STRATEGY_SEEKER_SMALL:
        if (bool_Enemy_Ships_Are_Much_Faster) then
          // Transition to direct fire, seeker usage with smaller ships
          set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_MIXED_SMALL
        else
          // Transition to seeker usage with larger ships
          set lng_AI_Empire_Design_Strategy := AI_DESIGN_STRATEGY_SEEKER
        endif
        // Debug output
        call Sys_Debug_Print("Performance", "  - Switching Design Strategy from Seeker + Small")
    endcase
  endif

  // Design strategy date
  if (prev_design_strategy <> lng_AI_Empire_Design_Strategy) then
    set lng_AI_Empire_Design_Strategy_Date := sys_long_Game_Date
  endif

  return TRUE
end

//------------------------------------------------------------------------
// Set_Empire_Strategy_Modifiers
//------------------------------------------------------------------------
function Set_Empire_Strategy_Modifiers returns boolean
begin

  // Set our empire strategy modifiers
  case lng_AI_Empire_Strategy
    AI_EMPIRE_STRATEGY_PEACEFUL:
      set bool_AI_Strategy_Peaceful := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Strategy = Peaceful")
    AI_EMPIRE_STRATEGY_DEFEND:
      set bool_AI_Strategy_Defend := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Strategy = Defend")
    AI_EMPIRE_STRATEGY_BUILDUP:
      set bool_AI_Strategy_Buildup := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Strategy = Buildup")
    AI_EMPIRE_STRATEGY_WEAK_ATTACK:
      set bool_AI_Strategy_Attack := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Strategy = Weak Attack")
    AI_EMPIRE_STRATEGY_RIVAL_ATTACK:
      set bool_AI_Strategy_Attack := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Strategy = Rival Attack")
    AI_EMPIRE_STRATEGY_HUMAN_ATTACK:
      set bool_AI_Strategy_Attack := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Strategy = Human Attack")
    AI_EMPIRE_STRATEGY_SEEK_PEACE:
      set bool_AI_Strategy_Seek_Peace := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Strategy = Seek Peace")
    AI_EMPIRE_STRATEGY_LAST_STAND:
      set bool_AI_Strategy_Last_Stand := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Strategy = Last Stand")
    AI_EMPIRE_STRATEGY_OUT_IN_FLAMES:
      set bool_AI_Strategy_Flame_Out := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Strategy = Out in Flames")
  endcase

  // Set our design strategy modifiers
  case lng_AI_Empire_Design_Strategy
    AI_DESIGN_STRATEGY_DIRECTFIRE:
      set bool_AI_Design_Preference_Seeker := FALSE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Design Strategy = Direct Fire")
    AI_DESIGN_STRATEGY_DIRECTFIRE_SMALL:
      set bool_AI_Design_Preference_Small := TRUE
      set bool_AI_Design_Preference_Seeker := FALSE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Design Strategy = Direct Fire + Small")
    AI_DESIGN_STRATEGY_MIXED:
      set bool_AI_Design_Preference_Mixed := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Design Strategy = Mixed")
    AI_DESIGN_STRATEGY_MIXED_SMALL:
      set bool_AI_Design_Preference_Small := TRUE
      set bool_AI_Design_Preference_Mixed := TRUE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Design Strategy = Mixed + Small")
    AI_DESIGN_STRATEGY_SEEKER:
      set bool_AI_Design_Preference_Direct_Fire := FALSE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Design Strategy = Seeker")
    AI_DESIGN_STRATEGY_SEEKER_SMALL:
      set bool_AI_Design_Preference_Small := TRUE
      set bool_AI_Design_Preference_Direct_Fire := FALSE
      // Debug output
      call Sys_Debug_Print("Performance", "    - Empire Design Strategy = Seeker + Small")
  endcase

  return TRUE
end